package hn.cch.example.other;

public class StringCumulative {

    /**
     * 实现两个数字字符串十进制求和（数字字符串位数超过转换范围）
     *
     * @param a
     * @param b
     * @return 如果出错返回ERROR
     */
    public static String add(String a, String b) {
        //对比获得两字符串中最长的字符串的长度
        int max = Math.max(a.length(), b.length());
        StringBuilder ret = new StringBuilder(max + 1); //可能进位
        char m, n;//记录两个数字字符串的每位字符
        int sum, num;//和值，个位
        boolean flag = false;//进位标志
        for (int i = 1; i <= max + 1; i++) {
            //将长度较长的数字字符串多处部分与0相加
            m = i <= a.length() ? a.charAt(a.length() - i) : 48;
            n = i <= b.length() ? b.charAt(b.length() - i) : 48;
            // 字符对应的值int->char:48~57=0~9
            if (m >= 48 && m <= 57 && n >= 48 && n <= 57) {
                //判断是否有低位进位
                sum = flag ? 1 : 0;
                //一位数字计算和值
                sum = sum + m + n - 48 * 2;
                //判断是否向高位进位
                if (sum > 9) {
                    flag = true;
                    num = sum - 10;
                } else {
                    flag = false;
                    num = sum;
                }
                //在首位插入结果
                ret.insert(0, num);
            } else {//非数字返回ERROR
                return "ERROR";
            }
        }
        return ret.toString();
    }


}
